
#ifndef _PUISSANCE_H
#define _PUISSANCE_H

#include "Terrain.h"

/**
 * @struct struct Puissance
 * @brief Gestion des coordonnées x et y
 *
 * Les coordonnées x et y sont utilisées dans
  la gestion de positionnement des pions
 *
 */
typedef struct{
	int x,y; /**coordonnées x et y*/
} Puissance;

/**
 * @fn void puiInit(Puissance *);
 * @brief initialisation x et y à 0
 *
 * @param[in, out] Pointeur de type Puissance
 */
void puiInit(Puissance *);

/**
 * @fn int puiGetX(const Puissance *);
 * @brief Renvoi la valeur de x
 *
 * @param[in, out] Pointeur de type Puissance en mode donnée
 * @return la valeur de x
 */
int puiGetX(const Puissance *);
/**
 * @fn int puiGetX(const Puissance *);
 * @brief Renvoi la valeur de y
 *
 * @param[in, out] Pointeur de type Puissance en mode donnée
 * @return la valeur de y
 */
int puiGetY(const Puissance *);
/**
 * @fn int pionJauneValide(Terrain *, Cases cases, int i, int j);
 * @brief traitement de places libres pour les pions jaunes
 *
 * @param[in, out] Pointeur Terrain, coordonnées du pointeur de la sourie
 * @return 1 si tout est OK
 */
int pionJauneValide(Terrain *, int i, int j);

/**
 * @fn int pionRougeValide(Terrain *, Cases cases, int i, int j);
 * @brief traitement de places libres pour les pions rouges
 *
 * @param[in, out] Pointeur Terrain, coordonnées du pointeur de la sourie
 * @return 1 si tout est OK
 */
int pionRougeValide(Terrain *, int i, int j);

/**
 * @fn int positionDePion(const Terrain *pTer, const int x, const int y);
 * @brief Renvoi la position où il faut que le pion soit insérer (la case la plus basse qui soit libre) dans la colonne vertical
 *
 * @param[in, out] Pointeur Terrain, coordonnées de la case d'analyse de départ
 * @return Renvoi la coordonnée verticale de la case où le pion doit être insérer
 */
int positionDePion(const Terrain *pTer, const int x, const int y);


/**
 * @fn int balayage(const Terrain *pTer, const int x,const int y,const char val);
 * @brief Balayage des cases dans le sens horizontal, vertical et diagonal, pour détérminer l'alignement des 4 pions de même couleur
 *
 * @param[in, out] Pointeur Terrain, coordonnées de la case d'analyse de départ et la couleur de pion à chercher
 * @return 1 si 4 pions sont alignés, 0 sinon
 */
int balayage(const Terrain *pTer, const int x,const int y,const char val);


#endif
